const express = require("express")
const router = express.Router()
const adminDB = require("../../db/admin")
const nodemailer = require("nodemailer")

// 添加管理员
router.post("/add", async (req, res) => {
  try {
    const { name, pass, email, notify } = req.body
    // 查看用户名是否合法
    if (!name.trim() || name.length < 2 || name.length > 12) {
      return res.send({
        code: 2,
        mes: "用户名不合法",
      })
    }

    // 查看密码是否合法
    if (!pass.trim() || pass.length < 6 || pass.length > 12) {
      return res.send({
        code: 2,
        mes: "密码不合法",
      })
    }
    // 查看邮件
    if (!email.trim() || !email.includes("@")) {
      return res.send({
        code: 2,
        mes: "邮箱地址不合法",
      })
    }

    // 查看管理员是否存在
    const doc = await adminDB.findOne({ name })
    if (doc)
      return res.send({
        code: 2,
        mes: "该管理员已存在",
      })
    const doc1 = await adminDB.findOne({ email })
    if (doc1)
      return res.send({
        code: 2,
        mes: "该邮箱已被注册",
      })
    // 存入
    const adminID = await adminDB.create({ name, pass, email })
    // 追加到用户消息
    await adminDB.findByIdAndUpdate(adminID._id, {
      $inc: { systemUnread: 1 },
      $push: {
        messageList: {
          title: "一条欢迎消息",
          des: `尊敬的${adminID.name}，您好！很高兴您加入我们公益星管理员大家庭，在这里我们希望您可以做到按时处理预约消息，合理管理后台。期待您的表现！！！`,
          constType: 0,
        },
      },
    })

    if (notify) {
      // 发送邮件 通知该用户
      // 发送邮件
      let transporter = nodemailer.createTransport({
        host: "smtp.qq.com",
        port: 587,
        secure: false,
        auth: {
          user: "coderhjx@foxmail.com",
          pass: "ctnmiovjbnsgdcgc",
        },
      })

      let opt = {
        from: '"新新小朋友科技有限有限公司"<coderhjx@foxmail.com>',
        to: email,
        subject: "【公益星】- 公益星管理员邀请函！", //主题
        html: `
      <h2>尊敬的${name}，你好！</h2>
      <p style="text-indent: 2em">
        新新小朋友诚邀您入住
        <a
          target="_blank"
          style="color: #f13a3a; font-weight: 800"
          href="http://localhost:8080"
          >公益星</a
        >
        公益平台，这是一个社会性公益活动平台，在这里我们可以尽最大可能去帮助他人，期待您的到来！
      </p>
      <p style="text-indent: 2em">
        您的登录账号为：<span style="color: red">${name}</span>
      </p>
      <p style="text-indent: 2em">
        您的登录密码为：<span style="color: red">${pass}</span>
      </p>
      <h4>请忽泄露给别人！</h4>
      <a href="http://localhost:8080/news">点击登录</a>

      `,
      }
      await transporter.sendMail(opt)
      res.send({
        code: 0,
        mes: "管理员添加成功，已以邮件的形式通知",
      })
    }

    res.send({
      code: 0,
      mes: "管理员添加成功",
    })
  } catch (error) {
    console.log(error)
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
      data: error,
    })
  }
})

// 获取所有管理员列表
router.get("/admintorList", async (req, res) => {
  try {
    const admintorList = await adminDB.find({}, { pass: 0, supertube: 0 })
    res.send({
      code: 0,
      mes: "管理员列表",
      data: {
        admintorList,
      },
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
    })
  }
})

// 分页获取管理员列表
router.get("/pageList", async (req, res) => {
  try {
    const { limit, skip } = req.query
    let admintorList = []
    admintorList = await adminDB.find(
      { supertube: false },
      {
        pass: 0,
      },
      {
        sort: {
          time: -1,
        },
        limit: limit * 1,
        skip: skip * 1,
      }
    )

    res.send({
      code: 0,
      mes: "管理员列表",
      data: {
        admintorList,
      },
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
    })
  }
})

// 搜索获取管理员列表
router.get("/searchList", async (req, res) => {
  try {
    const { name } = req.query
    const admintorAllList = await adminDB.find({ supertube: false })

    const admintorList = admintorAllList.filter((item) =>
      item.name.includes(name)
    )
    const allNums = admintorList.length
    res.send({
      code: 0,
      mes: "管理员列表搜索结果",
      data: {
        admintorList,
        allNums,
      },
    })
  } catch (error) {
    console.log(error)
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
    })
  }
})

// 修改管理员权限
router.post("/updateAuthority", async (req, res) => {
  try {
    // 用户ID 权限种类 0 => 删除  1 => 发布 2 => 修改
    const { userID, type } = req.body
    // 查看是否存在
    const doc = await adminDB.findById(userID)
    if (!doc)
      return res.send({
        code: 4,
        mes: "该管理员已被删除",
      })
    // 删除权限
    if (type == 0) {
      await adminDB.findByIdAndUpdate(userID, {
        deletepower: !doc.deletepower,
      })
    }
    // 发布权限
    else if (type == 1) {
      await adminDB.findByIdAndUpdate(userID, {
        addpower: !doc.addpower,
      })
    }
    // 修改权限
    else if (type == 2) {
      await adminDB.findByIdAndUpdate(userID, {
        updatepower: !doc.updatepower,
      })
    }
    res.send({
      code: 0,
      mes: "权限更新成功",
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常,请稍后再试",
    })
  }
})

// 删除管理员
router.post("/delete", async (req, res) => {
  try {
    // 用户ID
    const { userID } = req.body
    const doc = await adminDB.findById(userID)
    if (!doc)
      return res.send({
        code: 2,
        mes: "该管理员已被删除",
      })
    // 删除
    await adminDB.findByIdAndRemove(userID)
    res.send({
      code: 0,
      mes: "该管理员已成功删除",
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常,请稍后再试",
    })
  }
})

module.exports = router
